package com.hxm.demo.newcoder;

import java.util.Stack;

/**
 * description: add a description
 *
 * @author huangxiaoming
 * @version 1.0.0
 * @date 2023/08/29 19:32:59
 */
public class TestBM11 {

    public static void main(String[] args) {
        ListNode pHead1 = new ListNode(9);
        pHead1.next = new ListNode(3);
        pHead1.next.next = new ListNode(7);

        ListNode pHead2 = new ListNode(6);
        pHead2.next = new ListNode(3);
        ListNode listNode = addInList(pHead1, pHead2);
        System.out.println(listNode);
    }

//    public static ListNode addInList(ListNode head1, ListNode head2) {
//        // write code here
//        int i = head1.val;
//        int j = head2.val;
//        while (head1.next != null) {
//            i = i * 10 + head1.next.val;
//            head1 = head1.next;
//        }
//        while (head2.next != null) {
//            j = j * 10 + head2.next.val;
//            head2 = head2.next;
//        }
//        i = i + j;
//        ListNode pre = null;
//        while (i != 0) {
//            int val = i % 10;
//            ListNode node = new ListNode(val);
//            node.next = pre;
//            pre = node;
//            if (i == i/10){
//                break;
//            }
//            i = i / 10;
//        }
//        return pre;
//    }

    public static ListNode addInList(ListNode head1, ListNode head2) {
        // write code here
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        while (head1 != null) {
            stack1.push(head1.val);
            head1 = head1.next;
        }

        while (head2 != null) {
            stack2.push(head2.val);
            head2 = head2.next;
        }

        ListNode pre = null;
        int mod = 0;
        while (!stack1.isEmpty() || !stack2.isEmpty()) {
            int x = stack1.isEmpty() ? 0 : stack1.pop();
            int y = stack2.isEmpty() ? 0 : stack2.pop();
            ListNode listNode = new ListNode((x + y + mod) % 10);
            listNode.next = pre;
            pre = listNode;
            mod = (x + y + mod) / 10;
        }
        if (mod > 0) {
            ListNode listNode = new ListNode(mod);
            listNode.next = pre;
            pre = listNode;
        }
        return pre;
    }
}
